// #include<vector>
// #include<limits>
// #include<cstddef>
// #include<iostream>
// #include<sstream>
// #include<map>
// #include<algorithm>
// using namespace std;

// struct WT{
//     int ass, work;
// };

// class MinTime{
// public:
//     //耗时长的优先 分配短的优先
//     int MT(vector<WT > tm){
//         std::sort(tm.begin(), tm.end(), [](WT a, WT b)->bool{
//             // auto at = a.ass+a.work;
//             // auto bt = b.ass+b.work;
//             if(a.work == b.work) {
//                 return a.ass > b.ass;
//             }
//             return a.work > b.work;
//         });
//         auto assignTime = 0;
//         auto maxEndTime = 0;
//         for(auto i = 0; i < tm.size(); i++){
//             assignTime += tm[i].ass;
//             auto et = assignTime+tm[i].work;
//             // std::cout<<"I:"<<et <<":"<<assignTime <<":" << tm[i].ass << endl;
//             maxEndTime = std::max(maxEndTime, et);
//         }
//         return maxEndTime;
//     }
// };
// int main(int, char**) {
//     string n;
//     getline(cin, n);
//     auto nn = std::stoi(n);
//     // vector<string> tm{
//     //     "3 6",
//     //     "4 3",
//     //     "3 2",
//     // };
//     vector<WT> wt;
//     for(auto i = 0; i < nn; i++){
//         string data;
//         getline(cin, data);
//         // auto data = tm[i];
//         std::stringstream iss(data);
//         std::vector<int> allTok;
//         std::string token;
//         while(std::getline(iss, token, ' ')){
//             allTok.push_back(std::stoi(token));
//         }
//         WT w;
//         w.ass = allTok[0];
//         w.work = allTok[1];
//         wt.push_back(w);
//     }
//     MinTime mt;
//     auto r = mt.MT(wt);
//     std::cout << "Project " << nn<<": " << r << endl;
// }